home *** CD-ROM | disk | FTP | other *** search
/ The Atari Compendium / The Atari Compendium (Toad Computers) (1994).iso / files / umich / tex / texsrc.arc / TEX6.C < prev    next >
C/C++ Source or Header  |  1988-09-14  |  60KB  |  2,134 lines

  1. overlay "tex6"
  2. #define EXTERN extern
  3. #include "texd.h"
  4.  
  5. alignpeek () { /* 20 */ r_alignpeek 
  6.   lab20: alignstate = 1000000 ; 
  7.   do { getxtoken () ; 
  8.   } while ( ! ( curcmd != 10 ) ) ; 
  9.   if ( curcmd == 34 ) 
  10.   {
  11.     scanleftbrac () ; 
  12.     newsavelevel ( 7 ) ; 
  13.     if ( curlist .modefield == - 1 ) 
  14.     normalparagr () ; 
  15.   } 
  16.   else if ( curcmd == 2 ) 
  17.   finalign () ; 
  18.   else if ( ( curcmd == 5 ) && ( curchr == 130 ) ) 
  19.   goto lab20 ; 
  20.   else { 
  21.     initrow () ; 
  22.     initcol () ; 
  23.   } 
  24. halfword zfiniteshrink ( p ) 
  25. halfword p ; 
  26. {register halfword Result; r_finiteshrink 
  27.   halfword q ; 
  28.   if ( noshrinkerro ) 
  29.   {
  30.     noshrinkerro = false ; 
  31.     {
  32.       if ( interaction == 3 ) 
  33.       wakeuptermin () ; 
  34.       printnl ( 133 ) ; 
  35.       print ( 771 ) ; 
  36.     } 
  37.     {
  38.       helpptr = 5 ; 
  39.       helpline [ 4 ] = 772 ; 
  40.       helpline [ 3 ] = 773 ; 
  41.       helpline [ 2 ] = 774 ; 
  42.       helpline [ 1 ] = 775 ; 
  43.       helpline [ 0 ] = 776 ; 
  44.     } 
  45.     error () ; 
  46.   } 
  47.   q = newspec ( p ) ; 
  48.   mem [(long) q ] .hh.b1 = 0 ; 
  49.   deletegluere ( p ) ; 
  50.   Result = q ; 
  51.   return(Result) ; 
  52. ztrybreak ( pi , breaktype ) 
  53. integer pi ; 
  54. smallnumber breaktype ; 
  55. {/* 10 30 31 22 60 */ r_trybreak 
  56.   halfword r ; 
  57.   halfword prevr ; 
  58.   halfword oldl ; 
  59.   boolean nobreakyet ; 
  60.   halfword prevprevr ; 
  61.   halfword s ; 
  62.   halfword q ; 
  63.   halfword v ; 
  64.   integer t ; 
  65.   internalfont f ; 
  66.   halfword l ; 
  67.   boolean noderstaysac ; 
  68.   scaled linewidth ; 
  69.   quarterword fitclass ; 
  70.   halfword b ; 
  71.   integer d ; 
  72.   boolean artificialba ; 
  73.   halfword savelink ; 
  74.   scaled shortfall ; 
  75.   fourquarters qi;
  76.   if ( abs ( pi ) >= 10000 ) 
  77.   if ( pi > 0 ) 
  78.   goto lab10 ; 
  79.   else pi = - 10000 ; 
  80.   nobreakyet = true ; 
  81.   prevr = memtop - 7 ; 
  82.   oldl = 0 ; 
  83.   curactivewid [ 1 ] = activewidth [ 1 ] ; 
  84.   curactivewid [ 2 ] = activewidth [ 2 ] ; 
  85.   curactivewid [ 3 ] = activewidth [ 3 ] ; 
  86.   curactivewid [ 4 ] = activewidth [ 4 ] ; 
  87.   curactivewid [ 5 ] = activewidth [ 5 ] ; 
  88.   curactivewid [ 6 ] = activewidth [ 6 ] ; 
  89.   while ( true ) { 
  90.     lab22: r = mem [(long) prevr ] .hh .v.RH ; 
  91.     if ( mem [(long) r ] .hh.b0 == 2 ) 
  92.     {
  93.       curactivewid [ 1 ] = curactivewid [ 1 ] + mem [(long) r + 1 ] .cint ; 
  94.       curactivewid [ 2 ] = curactivewid [ 2 ] + mem [(long) r + 2 ] .cint ; 
  95.       curactivewid [ 3 ] = curactivewid [ 3 ] + mem [(long) r + 3 ] .cint ; 
  96.       curactivewid [ 4 ] = curactivewid [ 4 ] + mem [(long) r + 4 ] .cint ; 
  97.       curactivewid [ 5 ] = curactivewid [ 5 ] + mem [(long) r + 5 ] .cint ; 
  98.       curactivewid [ 6 ] = curactivewid [ 6 ] + mem [(long) r + 6 ] .cint ; 
  99.       prevprevr = prevr ; 
  100.       prevr = r ; 
  101.       goto lab22 ; 
  102.     } 
  103.     {
  104.       l = mem [(long) r + 1 ] .hh .v.LH ; 
  105.       if ( l > oldl ) 
  106.       {
  107.     if ( ( minimumdemer < 1073741823 ) && ( ( oldl != easyline ) || ( r == 
  108.     memtop - 7 ) ) ) 
  109.     {
  110.       if ( nobreakyet ) 
  111.       {
  112.         nobreakyet = false ; 
  113.         breakwidth [ 1 ] = background [ 1 ] ; 
  114.         breakwidth [ 2 ] = background [ 2 ] ; 
  115.         breakwidth [ 3 ] = background [ 3 ] ; 
  116.         breakwidth [ 4 ] = background [ 4 ] ; 
  117.         breakwidth [ 5 ] = background [ 5 ] ; 
  118.         breakwidth [ 6 ] = background [ 6 ] ; 
  119.         s = curp ; 
  120.         if ( breaktype > 0 ) 
  121.         if ( curp != 0 ) 
  122.         {
  123.           t = mem [(long) curp ] .hh.b1 ; 
  124.           v = curp ; 
  125.           s = mem [(long) curp + 1 ] .hh .v.RH ; 
  126.           while ( t > 0 ) { 
  127.         decr ( t ) ; 
  128.         v = mem [(long) v ] .hh .v.RH ; 
  129.         if ( ( v >= himemmin ) ) 
  130.         {
  131.           f = mem [(long) v ] .hh.b0 ; 
  132. /*          breakwidth [ 1 ] = breakwidth [ 1 ] - fontinfo [ widthbase [ 
  133.           f ] + fontinfo [ charbase [ f ] + mem [(long) v ] .hh.b1 ] .qqqq 
  134.           .b0 ] .cint ; 
  135. */
  136.     qi = fontinfo [ charbase [ f ] + mem [(long) v ] .hh.b1 ] .qqqq;
  137.     breakwidth [ 1 ] = breakwidth [ 1 ] - fontinfo [ widthbase [  f ]
  138.                +  qi .b0 ] .cint ; 
  139.         } 
  140.         else switch ( mem [(long) v ] .hh.b0 ) 
  141.         {case 6 : 
  142.           {
  143.             f = mem [(long) v + 1 ] .hh.b0 ; 
  144. /*            breakwidth [ 1 ] = breakwidth [ 1 ] - fontinfo [ widthbase 
  145.             [ f ] + fontinfo [ charbase [ f ] + mem [(long) v + 1 ] .hh.b1 ] 
  146.             .qqqq .b0 ] .cint ; 
  147. */
  148.    qi = fontinfo [ charbase [ f ] + mem [(long) v + 1 ] .hh.b1 ].qqqq;
  149.             breakwidth [ 1 ] = breakwidth [ 1 ] - fontinfo [ widthbase 
  150.             [ f ] +qi.b0 ] .cint ; 
  151.           } 
  152.           break ; 
  153.         case 0 : 
  154.         case 1 : 
  155.         case 2 : 
  156.         case 11 : 
  157.           breakwidth [ 1 ] = breakwidth [ 1 ] - mem [(long) v + 1 ] .cint ; 
  158.           break ; 
  159.         default : 
  160.           confusion ( 777 ) ; 
  161.           break ; 
  162.         } 
  163.           } 
  164.           while ( s != 0 ) { 
  165.         if ( ( s >= himemmin ) ) 
  166.         {
  167.           f = mem [(long) s ] .hh.b0 ; 
  168. /*          breakwidth [ 1 ] = breakwidth [ 1 ] + fontinfo [ widthbase [ 
  169.           f ] + fontinfo [ charbase [ f ] + mem [(long) s ] .hh.b1 ] .qqqq 
  170.           .b0 ] .cint ; 
  171. */
  172.     qi = fontinfo [ charbase [ f ] + mem [(long) s ] .hh.b1 ] .qqqq;
  173.     breakwidth [ 1 ] = breakwidth [ 1 ] + fontinfo [ widthbase [  f ]
  174.                +  qi .b0 ] .cint ; 
  175.         } 
  176.         else switch ( mem [(long) s ] .hh.b0 ) 
  177.         {case 6 : 
  178.           {
  179.             f = mem [(long) s + 1 ] .hh.b0 ; 
  180. /*            breakwidth [ 1 ] = breakwidth [ 1 ] + fontinfo [ widthbase 
  181.             [ f ] + fontinfo [ charbase [ f ] + mem [(long) s + 1 ] .hh.b1 ] 
  182.             .qqqq .b0 ] .cint ; 
  183. */
  184.    qi = fontinfo [ charbase [ f ] + mem [(long) s + 1 ] .hh.b1 ].qqqq;
  185.             breakwidth [ 1 ] = breakwidth [ 1 ] + fontinfo [ widthbase 
  186.             [ f ] +qi.b0 ] .cint ; 
  187.           } 
  188.           break ; 
  189.         case 0 : 
  190.         case 1 : 
  191.         case 2 : 
  192.           breakwidth [ 1 ] = breakwidth [ 1 ] + mem [(long) s + 1 ] .cint ; 
  193.           break ; 
  194.         case 11 : 
  195.           if ( ( t == 0 ) && ( mem [(long) s ] .hh.b1 != 2 ) ) 
  196.           t = - 1 ; 
  197.           else breakwidth [ 1 ] = breakwidth [ 1 ] + mem [(long) s + 1 ] 
  198.           .cint ; 
  199.           break ; 
  200.         default : 
  201.           confusion ( 778 ) ; 
  202.           break ; 
  203.         } 
  204.         incr ( t ) ; 
  205.         s = mem [(long) s ] .hh .v.RH ; 
  206.           } 
  207.           breakwidth [ 1 ] = breakwidth [ 1 ] + discwidth ; 
  208.           if ( t == 0 ) 
  209.           s = mem [(long) v ] .hh .v.RH ; 
  210.         } 
  211.         while ( s != 0 ) { 
  212.           if ( ( s >= himemmin ) ) 
  213.           goto lab30 ; 
  214.           switch ( mem [(long) s ] .hh.b0 ) 
  215.           {case 10 : 
  216.         {
  217.           v = mem [(long) s + 1 ] .hh .v.LH ; 
  218.           breakwidth [ 1 ] = breakwidth [ 1 ] - mem [(long) v + 1 ] .cint ; 
  219.           breakwidth [ 2 + mem [(long) v ] .hh.b0 ] = breakwidth [ 2 + mem [(long) 
  220.           v ] .hh.b0 ] - mem [(long) v + 2 ] .cint ; 
  221.           breakwidth [ 6 ] = breakwidth [ 6 ] - mem [(long) v + 3 ] .cint ; 
  222.         } 
  223.         break ; 
  224.           case 12 : 
  225.         ; 
  226.         break ; 
  227.           case 9 : 
  228.           case 11 : 
  229.         if ( mem [(long) s ] .hh.b1 == 2 ) 
  230.         goto lab30 ; 
  231.         else breakwidth [ 1 ] = breakwidth [ 1 ] - mem [(long) s + 1 ] .cint 
  232.         ; 
  233.         break ; 
  234.           default : 
  235.         goto lab30 ; 
  236.         break ; 
  237.           } 
  238.           s = mem [(long) s ] .hh .v.RH ; 
  239.         } 
  240.         lab30: ; 
  241.       } 
  242.       if ( mem [(long) prevr ] .hh.b0 == 2 ) 
  243.       {
  244.         mem [(long) prevr + 1 ] .cint = mem [(long) prevr + 1 ] .cint - curactivewid [ 
  245.         1 ] + breakwidth [ 1 ] ; 
  246.         mem [(long) prevr + 2 ] .cint = mem [(long) prevr + 2 ] .cint - curactivewid [ 
  247.         2 ] + breakwidth [ 2 ] ; 
  248.         mem [(long) prevr + 3 ] .cint = mem [(long) prevr + 3 ] .cint - curactivewid [ 
  249.         3 ] + breakwidth [ 3 ] ; 
  250.         mem [(long) prevr + 4 ] .cint = mem [(long) prevr + 4 ] .cint - curactivewid [ 
  251.         4 ] + breakwidth [ 4 ] ; 
  252.         mem [(long) prevr + 5 ] .cint = mem [(long) prevr + 5 ] .cint - curactivewid [ 
  253.         5 ] + breakwidth [ 5 ] ; 
  254.         mem [(long) prevr + 6 ] .cint = mem [(long) prevr + 6 ] .cint - curactivewid [ 
  255.         6 ] + breakwidth [ 6 ] ; 
  256.       } 
  257.       else if ( prevr == memtop - 7 ) 
  258.       {
  259.         activewidth [ 1 ] = breakwidth [ 1 ] ; 
  260.         activewidth [ 2 ] = breakwidth [ 2 ] ; 
  261.         activewidth [ 3 ] = breakwidth [ 3 ] ; 
  262.         activewidth [ 4 ] = breakwidth [ 4 ] ; 
  263.         activewidth [ 5 ] = breakwidth [ 5 ] ; 
  264.         activewidth [ 6 ] = breakwidth [ 6 ] ; 
  265.       } 
  266.       else { 
  267.         q = getnode ( 7 ) ; 
  268.         mem [(long) q ] .hh .v.RH = r ; 
  269.         mem [(long) q ] .hh.b0 = 2 ; 
  270.         mem [(long) q ] .hh.b1 = 0 ; 
  271.         mem [